//package com.design.movieticket.common.util;
//
//
//
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.Jwts;
//
//import io.jsonwebtoken.SignatureAlgorithm;
//
//
//import java.security.Key;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.UUID;
//
//public class JwtUtil {
//    /**
//     * 有效期5秒
//     */
//    private static final long EXPIRE_TIME = 2*1000;
//
//    /**
//     *秘钥
//     */
//    static Key key = Keys.secretKeyFor(SignatureAlgorithm.HS512);
//
//    /**
//     * 创建时间
//     */
//    private static final String CREATED = "created";
//    private static final String USERNAME = "username";
//    private static final String EXPIRE = "expire";
//    private static final String TOKEN_KEY = "token_key";
//
//    /**
//     * 生成声明数据,key-value形式
//     */
//    public static Map<String,Object> generateClaim(String username){
//        //claims为数据声明,数据存放在payload,相当于一个Map
//        Map claims = new HashMap<>();
//        claims.put(USERNAME,username);
//        claims.put(CREATED,new Date());
//        //放入一个随机uuid
//        claims.put(TOKEN_KEY, UUID.randomUUID().toString());
//        return claims;
//    }
//
//    /**
//     * 根据声明数据生成jwt token
//     */
//    public static String generateToken(Map<String, Object> claims){
//        //定义过期时间
//        Date expirationDate = new Date(System.currentTimeMillis() + EXPIRE_TIME);
//        //放入数据声明和过期时间
//        return Jwts.builder().setClaims(claims).setExpiration(expirationDate).signWith(key).compact();
//    }
//
//    /**
//     * 从令牌中获取数据声明
//     * @param token 令牌
//     * @return 数据声明
//     */
//    private static Claims getClaimsFromToken(String token){
//        Claims claims;
//        try{
//            claims = Jwts.parserBuilder()
//                    .setSigningKey(key)
//                    .build()
//                    .parseClaimsJws(token).getBody();
//        }catch (Exception e){
//            claims = null;
//        }
//        return claims;
//    }
//
//    /**
//     * 判断令牌是否过期
//     * @param token 令牌
//     * @return 是否过期
//     */
//    public static  Boolean isTokenExpired(String token){
//        try{
//            Claims claims = getClaimsFromToken(token);
//            //获取过期时间
//            Date expiration = claims.getExpiration();
//            System.out.println(System.currentTimeMillis()+";"+ expiration.getTime());
//            if (System.currentTimeMillis() - expiration.getTime() < 0){
//                System.out.println("未过期");
//                return false;
//            }else {
//                return true;
//            }
//        }catch (Exception e){
//            return true;
//        }
//    }
//
//    /**
//     * 从令牌中获取用户名
//     * @param token 令牌
//     * @return 用户名
//     */
//    public static String getUsernameFromToken(String token){
//        String username;
//        try{
//            Claims claims = getClaimsFromToken(token);
//            username = (String) claims.get(USERNAME);
//        }catch (Exception e){
//            username = null;
//        }
//        return username;
//    }
//
//    /**
//     *刷新令牌
//     * @param token
//     * @return
//     */
//    public static String refreshToken(String token){
//        String refreshedToken;
//        try{
//            Claims claims = getClaimsFromToken(token);
//            claims.put("CREATED",new Date());
//            refreshedToken = generateToken(claims);
//        }catch (Exception e){
//            refreshedToken = null;
//        }
//        return refreshedToken;
//    }
//
//    /**
//     *根据用户名生成token
//     */
//    public static  String generateTokenFromUsername(String username){
//        return generateToken(generateClaim(username));
//    }
//
////    public static void main(String[] args) throws InterruptedException{
////        String username = "admin";
////        //生成token
////        String token = getUsernameFromToken(username);
////        System.out.println("生成的jwt token:" + token);
////
////        //获取token的声明数据
////        Claims claims = getClaimsFromToken(token);
////        System.out.println("2:获取到token的声明数据:" + claims);
////
////        //获取用户名
////        System.out.println("3: token中的用户名:" + getUsernameFromToken(token));
////
////        //判断token是否过期
////        System.out.println("4:token是否过期:" + isTokenExpired(token));
////    }
//
//}
